<html>
<head>
  <title>Evernote Export</title>
  <basefont face="微软雅黑" size="2" />
  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
  <meta name="exporter-version" content="YXBJ Windows/604484 (zh-CN, DDL); Windows/10.0.0 (Win64); EDAMVersion=V2;"/>
  <style>
    body, td {
      font-family: 微软雅黑;
      font-size: 10pt;
    }
  </style>
</head>
<body>
<a name="5172"/>

<div>
<span><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;"><br/></font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 18pt;"><b>组件式开发实践_v0.0.1a</b></font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">    目录</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">    一、研究目的</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">    二、组件</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">    三、配置文件《.env》</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">    四、组件包</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">    五、总结</font></div><div style="text-align: left; margin-left: 400px;"><font style="font-size: 16pt;"><b>一、研究目的</b></font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">    1.规范项目结构,解耦各模块</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">    2.提高团队开发效率</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">    3.避免重复造轮子</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">    4.降低项目接手难度</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 16pt;"><b>二、组件</b></font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">    组件工程可以参考样例工程'sample_project&quot;</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">    组件特点包括：1.独立git仓库2.独立编译3.可被组装4.携带基础脚本</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">    1.独立git仓库</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">       组件应该单独成库,并预设发布分支例如： Project_1.x</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">    2.独立编译</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">       组件需要携带依赖项,依赖项包括:第三方库和依赖子组件;第三方库又       </font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">       包括不同系统下的(debug/release)版本,开发/调试和发布分别在自己的</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">       本地环境和服务器环境进行；依赖子组件即其他标准组件库，通过git</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">       submodule进行控制。</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">    3.可被组装</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">       组件之间独立编译,且携带依赖项,可以通过基础脚本被《组件包》组装</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">       组件包可以通过《组件配置》对每个功能组件进行精准控制。</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">    4.提供基础脚本</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">       每个组件包，都必须要携带相同功能和用途的基础组件脚本,包括但不   </font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">       限于：build.sh clean.sh  dos2unix.sh login.sh pack.sh</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">       remote_install.sh task.sh 其中task脚本功能要能一键清除/生成/打包/</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">       部署</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">       基础脚本特点：1.任意路径都能有效执行2.共用同一套配置文件3.配置</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">       灵活</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 16pt;"><b>三、配置文件《.env》</b></font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">      默认配置项如下：</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">      [pro]</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">             pro_name=HelloApp //组件名称</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">      [conf]</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">             custom_profile=default //自定义配置路径默认default不生效</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">      [user]</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">             ip_address=192.168.30.215//远程部署ip地址</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">             user_name=root//用户名</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">             user_password=rockchip//密码</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">      [pack]</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">             pack_path=installation_package //自定义打包地址</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">      [build]</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">             build_type=Release //编译debug/relese</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">             build_tests=OFF //是否开启集成测试</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">      [vers]</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">             ver_major=1 //主版本号</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">             ver_minor=0 //次版本号</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">             ver_patch=1 //修正</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">             ver_cycle=a //开发阶段</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">     [book]</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">             author=mky //组件作者</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">             email=<a href="mailto:1477400876@qq.com">1477400876@qq.com</a> //通讯</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">      配置文件.env位于每个组件/组件包的根目录,每一个基础脚本的环境变</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">      量和其他配置变量都来自于.env配置文件。读取配置文件的相关动作,</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">      存储在base_config.sh,逻辑是优先读取当前用户的家目录下的.env文</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">      件，没有的话,会向上两级目录搜索.env文件,若再没有则向自己工程的</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">      根目录进行搜索，读取.env配置。其次还可以通过配置.env的</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">      custom_profile项指定配置文件路径。</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 16pt;"><b>四、组件包</b></font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">       1.组合组件</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">          各子组件被组件包组装在一起，组件包通过分别调用各个组件的基</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">          础脚本,进行清除/编译/打包/部署,不同的是，组件包配置文件.env的</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">          配置会覆盖组件的配置,全局生效。各组件的编译互不影响。</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">       2.组件包主要用于服务器发布程序。</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">          携带的基础脚本同组件的基础脚本略有不同,包括了子模块控制相关</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">          的脚本。团队合作开发时可以实现同台设备调试。通过操控服务器</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">          的组件包，可以一键恢复开发主板的软件环境。</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">       3.发布版本时自动生成发布报告</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">          通过组件包的版本查询脚本，可以生成组件包内发布的各个组件的</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">          版本说明,显示相关的组件信息。</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 16pt;"><b>五、总结</b></font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">      以掌静脉项目为例，所有的程序都已经改造完毕。最有代表性的是</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">      mv_palmar_veinl_terminal工程,可以进行参考,包含了第三方库,其他子组件,支持.env标准配置,通过cmake构建qt工程,        稳定可靠的标准组件脚本,被上一级组件包所组装。</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">      对于新加入团队的小伙伴，可以参考sample_project工程,作为模板工程开始功能设计。</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">      运用该组件开发套件，需要阅读</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">     《软件版本控制草案》-邓工</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">     《git远程仓库工作流程》-郑工</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">     《gtest单元测试和集成测试》-李工</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">     《用cmake优雅的构建大型项目》-蒙工</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">     《git submodule常用指令》-蒙工</font></div><div style="text-align: justify; margin-left: 400px;"><font style="font-size: 12pt;">     《<span style="text-indent: 0px;">项目组件结构.html</span>》-蒙工</font></div></span>
</div></body></html> 